home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Audio, Video & Photo / Songbird 0.7.0 / Songbird_0.7.0_windows-i686-msvc8.exe / jsmodules / sbLocalDatabaseMigrationUtils.jsm < prev    next >
Text File  |  2008-08-06  |  5KB  |  183 lines

  1. /*
  2. //
  3. // BEGIN SONGBIRD GPL
  4. //
  5. // This file is part of the Songbird web player.
  6. //
  7. // Copyright(c) 2005-2008 POTI, Inc.
  8. // http://songbirdnest.com
  9. //
  10. // This file may be licensed under the terms of of the
  11. // GNU General Public License Version 2 (the "GPL").
  12. //
  13. // Software distributed under the License is distributed
  14. // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
  15. // express or implied. See the GPL for the specific language
  16. // governing rights and limitations.
  17. //
  18. // You should have received a copy of the GPL along with this
  19. // program. If not, go to http://www.gnu.org/licenses/gpl.html
  20. // or write to the Free Software Foundation, Inc.,
  21. // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  22. //
  23. // END SONGBIRD GPL
  24. //
  25. */
  26.  
  27. EXPORTED_SYMBOLS = ["SBLocalDatabaseMigrationUtils"];
  28.  
  29. const Cc = Components.classes;
  30. const Ci = Components.interfaces;
  31. const Cr = Components.results;
  32. const Cu = Components.utils;
  33.  
  34. Cu.import("resource://gre/modules/XPCOMUtils.jsm");
  35. Cu.import("resource://app/jsmodules/SBJobUtils.jsm");
  36. Cu.import("resource://app/jsmodules/SBTimer.jsm");
  37.  
  38. var SBLocalDatabaseMigrationUtils = {
  39.   baseHandlerContractID: "@songbirdnest.com/Songbird/Library/LocalDatabase/Migration/Handler/"
  40. }
  41.  
  42. /**
  43.  *
  44.  */
  45. SBLocalDatabaseMigrationUtils.BaseMigrationHandler = function() {
  46.   SBJobUtils.JobBase.call(this);
  47. }
  48.  
  49. SBLocalDatabaseMigrationUtils.BaseMigrationHandler.prototype = {
  50.   __proto__               : SBJobUtils.JobBase.prototype,
  51.   
  52.   QueryInterface          : XPCOMUtils.generateQI(
  53.       [Ci.sbIJobProgress, Ci.sbIJobCancelable, 
  54.        Ci.sbILocalDatabaseMigrationHandler, Ci.nsIClassInfo]),
  55.  
  56.   /** nsIClassInfo, so callers don't have to QI from JS **/
  57.   
  58.   classDescription        : 'Songbird Base Local Database Migration Class',
  59.   classID                 : null,
  60.   contractID              : null,
  61.   flags                   : Ci.nsIClassInfo.MAIN_THREAD_ONLY,
  62.   implementationLanguage  : Ci.nsIProgrammingLanguage.JAVASCRIPT,
  63.   getHelperForLanguage    : function(aLanguage) { return null; },
  64.   getInterfaces : function(count) {
  65.     var interfaces = [Ci.sbIJobProgress,
  66.                       Ci.sbIJobCancelable,
  67.                       Ci.sbILocalDatabaseMigrationHandler,
  68.                       Ci.nsIClassInfo,
  69.                       Ci.nsISupports
  70.                      ];
  71.     count.value = interfaces.length;
  72.     return interfaces;
  73.   },
  74.   
  75.   migrationQuery: null,
  76.  
  77.   //
  78.   // Helpers to pump progress
  79.   //
  80.   _notifyJobsTimer: null,
  81.   
  82.   startNotificationTimer: function BaseMigrationHandler_startNotificationTimer(aTimeout) {
  83.     if(this._notifyJobsTimer) {
  84.       this._notifyJobsTimer.cancel();
  85.       this._notifyJobsTimer = null;
  86.     }
  87.     
  88.     if(aTimeout == null) {
  89.       aTimeout = 66;
  90.     }
  91.     
  92.     var self = this;
  93.     function notifyListeners() {
  94.       self.notifyJobProgressListeners();
  95.     }
  96.     
  97.     this._notifyJobsTimer = new SBTimer(notifyListeners,
  98.                                         aTimeout, 
  99.                                         Ci.nsITimer.TYPE_REPEATING_SLACK);
  100.   },
  101.   
  102.   stopNotificationTimer: function BaseMigrationHandler_stopNotificationTimer() {
  103.     if(this._notifyJobsTimer) {
  104.       this._notifyJobsTimer.cancel();
  105.       this._notifyJobsTimer = null;
  106.     }
  107.   },
  108.   
  109.   //
  110.   // sbIJobProgress overrides
  111.   //
  112.   get status() {
  113.     if(this.migrationQuery) {
  114.       var executing = this.migrationQuery.isExecuting();
  115.       if(executing) {
  116.         return Ci.sbIJobProgress.STATUS_RUNNING;
  117.       }
  118.       
  119.       var complete = (this.migrationQuery.currentQuery() == 
  120.                       this.migrationQuery.getQueryCount() - 1);
  121.                       
  122.       if(complete && !executing) {
  123.         return Ci.sbIJobProgress.STATUS_SUCCEEDED;
  124.       }
  125.     }
  126.     
  127.     return this._status;
  128.   },
  129.   
  130.   get progress() {
  131.     if(this.migrationQuery) {
  132.       return this.migrationQuery.currentQuery();
  133.     }
  134.     
  135.     return this._progress;    
  136.   },
  137.   
  138.   get total() {
  139.     if(this.migrationQuery) {
  140.       return this.migrationQuery.getQueryCount();
  141.     }
  142.     
  143.     return this._total;
  144.   },
  145.   
  146.   get canCancel() {
  147.     if(this.migrationQuery) {
  148.       return true;
  149.     }
  150.     
  151.     return this._canCancel;
  152.   },
  153.   
  154.   cancel: function BaseMigrationHandler_cancel() {
  155.     if(this.migrationQuery) {
  156.       this.migrationQuery.abort();
  157.     }
  158.     
  159.     return;
  160.   },
  161.   
  162.   //
  163.   // sbILocalDatabaseMigrationHandler
  164.   //
  165.   
  166.   /**
  167.    * Set this to the version the handler can migrate from.
  168.    */
  169.   fromVersion : 0,
  170.   
  171.   /**
  172.    * Set this to the version the handler migrates to.
  173.    */
  174.   toVersion   : 0,
  175.   
  176.   /**
  177.    * Override this method to provide migration of a library.
  178.    */
  179.   migrate     : function BaseMigrationHandler_migrate(aLibrary) {
  180.     throw Cr.NS_ERROR_NOT_IMPLEMENTED;
  181.   },
  182. }
  183.